package com.example.forum.services;

import com.example.forum.model.Article;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface IArticleServices {

    /**
     * date: 2024/09/11 16:06<br/>
     * Description:
     * 发布新帖子
     *
     * @param article 要发布的文章
     * @author: jmy <br/>
     */
    //当前方法执行过程中会被事务管理起来
    @Transactional
    int create(Article article);

    /**
     * date: 2024/09/16 9:57<br/>
     * Description: 根据id删除帖子 实际更新文章deleteState状态 为 1
     *
     * @author: jmy <br/>
     */
    @Transactional
    Integer delete(Long id);


    /**
     * date: 2024/09/11 16:08<br/>
     * Description:
     * 根据帖子id更新帖子内容
     *
     * @author: jmy <br/>
     */
    boolean updateArticle(Article article);

    /**
     * date: 2024/09/14 10:32<br/>
     * Description:
     * 查询所有文章
     *
     * @author: jmy <br/>
     */
    List<Article> selectAll();

    /**
     * date: 2024/09/14 13:19<br/>
     * Description:根据板块id查询帖子
     *
     * @author: jmy <br/>
     */
    List<Article> selectAllByBoardId(Long boardId);

    /**
     * date: 2024/09/14 18:32<br/>
     * Description: 根据文章id查看文章详情
     *
     * @author: jmy <br/>
     */
    Article selectDetailById(Long id);


    /**
     * date: 2024/09/15 13:16<br/>
     * Description:
     * 查询帖子信息，无表关联的
     *
     * @param id 帖子id
     * @author: jmy <br/>
     */
    Article selectById(Long id);


    /**
     * date: 2024/09/17 16:07<br/>
     * Description:
     * 用户个人中心，根据用户id查询帖子列表
     *
     * @param userId 用户id
     * @author: jmy <br/>
     */
    List<Article> selectByUserId(Long userId);


    /**
     * date: 2024/09/15 15:52<br/>
     * Description: 给帖子点赞
     *
     * @param id 帖子id
     * @author: jmy <br/>
     */
    boolean thumbsUpById(Long id);


    /**
     * date: 2024/09/15 12:25<br/>
     * Description:更新帖子内容
     *
     * @param id      帖子id
     * @param title   新的帖子标题
     * @param content 新的帖子内容
     * @author: jmy <br/>
     */
    boolean modify(Long id, String title, String content);


    /**
     * date: 2024/09/16 16:22<br/>
     * Description: 帖子回复数+1
     *
     * @author: jmy <br/>
     */
    Integer addOneReplyCountById(Long id);

    /**
     * date: 2024/09/26 0:22<br/>
     * Description:
     *关键字查询 根据标题模糊匹配帖子
     * @author: jmy <br/>
     */
    List<Article> selectAllByTitle(String key);


    /**
     * date: 2024/09/26 0:22<br/>
     * Description:
     *关键字查询 根据内容模糊匹配帖子
     * @author: jmy <br/>
     */
    List<Article> selectAllByContent(String key);
}
